/**
 * Copyright (c) 2025 OceanBase
 * OceanBase CE is licensed under Mulan PubL v2.
 * You can use this software according to the terms and conditions of the Mulan PubL v2.
 * You may obtain a copy of Mulan PubL v2 at:
 *          http://license.coscl.org.cn/MulanPubL-2.0
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PubL v2 for more details.
 */

#ifdef OP_PROFILE_NAME_DEF
OP_PROFILE_NAME_DEF(PHY_INVALID) /* 0 */
OP_PROFILE_NAME_DEF(PHY_LIMIT)
OP_PROFILE_NAME_DEF(PHY_SORT)
OP_PROFILE_NAME_DEF(PHY_TABLE_SCAN)
OP_PROFILE_NAME_DEF(PHY_VIRTUAL_TABLE_SCAN)
OP_PROFILE_NAME_DEF(PHY_MERGE_JOIN) /* 5 */
OP_PROFILE_NAME_DEF(PHY_NESTED_LOOP_JOIN)
OP_PROFILE_NAME_DEF(PHY_HASH_JOIN)
OP_PROFILE_NAME_DEF(PHY_MERGE_GROUP_BY)
OP_PROFILE_NAME_DEF(PHY_HASH_GROUP_BY)
OP_PROFILE_NAME_DEF(PHY_SCALAR_AGGREGATE) /* 10 */
OP_PROFILE_NAME_DEF(PHY_MERGE_DISTINCT)
OP_PROFILE_NAME_DEF(PHY_HASH_DISTINCT)
OP_PROFILE_NAME_DEF(PHY_ROOT_TRANSMIT)  /*not implement yet*/
OP_PROFILE_NAME_DEF(PHY_DIRECT_TRANSMIT)
OP_PROFILE_NAME_DEF(PHY_DIRECT_RECEIVE) /* 15 */
OP_PROFILE_NAME_DEF(PHY_DISTRIBUTED_TRANSMIT)
OP_PROFILE_NAME_DEF(PHY_FIFO_RECEIVE)
OP_PROFILE_NAME_DEF(PHY_MERGE_UNION)
OP_PROFILE_NAME_DEF(PHY_HASH_UNION)
OP_PROFILE_NAME_DEF(PHY_MERGE_INTERSECT) /* 20 */
OP_PROFILE_NAME_DEF(PHY_HASH_INTERSECT)
OP_PROFILE_NAME_DEF(PHY_MERGE_EXCEPT)
OP_PROFILE_NAME_DEF(PHY_HASH_EXCEPT)
OP_PROFILE_NAME_DEF(PHY_INSERT)
OP_PROFILE_NAME_DEF(PHY_UPDATE) /* 25 */
OP_PROFILE_NAME_DEF(PHY_DELETE)
OP_PROFILE_NAME_DEF(PHY_REPLACE)
OP_PROFILE_NAME_DEF(PHY_INSERT_ON_DUP)
OP_PROFILE_NAME_DEF(PHY_VALUES)
OP_PROFILE_NAME_DEF(PHY_EXPR_VALUES)   /* 30 */
OP_PROFILE_NAME_DEF(PHY_AUTOINCREMENT)
OP_PROFILE_NAME_DEF(PHY_SUBPLAN_SCAN)
OP_PROFILE_NAME_DEF(PHY_SUBPLAN_FILTER)
OP_PROFILE_NAME_DEF(PHY_MATERIAL)
OP_PROFILE_NAME_DEF(PHY_BLOCK_BASED_NESTED_LOOP_JOIN)  /*35*/
OP_PROFILE_NAME_DEF(PHY_DOMAIN_INDEX)  // no longer used
OP_PROFILE_NAME_DEF(PHY_TABLE_SCAN_WITH_DOMAIN_INDEX) // no-longer used
OP_PROFILE_NAME_DEF(PHY_WINDOW_FUNCTION)
OP_PROFILE_NAME_DEF(PHY_SELECT_INTO)
OP_PROFILE_NAME_DEF(PHY_TOPK)    /*40*/
OP_PROFILE_NAME_DEF(PHY_MV_TABLE_SCAN)
OP_PROFILE_NAME_DEF(PHY_APPEND)
OP_PROFILE_NAME_DEF(PHY_ROOT_RECEIVE)
OP_PROFILE_NAME_DEF(PHY_DISTRIBUTED_RECEIVE)
OP_PROFILE_NAME_DEF(PHY_FIFO_RECEIVE_V2) /*45*/
OP_PROFILE_NAME_DEF(PHY_TASK_ORDER_RECEIVE)
OP_PROFILE_NAME_DEF(PHY_MERGE_SORT_RECEIVE)
OP_PROFILE_NAME_DEF(PHY_NESTED_LOOP_CONNECT_BY_WITH_INDEX)
OP_PROFILE_NAME_DEF(PHY_COUNT)
OP_PROFILE_NAME_DEF(PHY_RECURSIVE_UNION_ALL) /*50*/
OP_PROFILE_NAME_DEF(PHY_FAKE_CTE_TABLE)
OP_PROFILE_NAME_DEF(PHY_MERGE)
OP_PROFILE_NAME_DEF(PHY_ROW_SAMPLE_SCAN)
OP_PROFILE_NAME_DEF(PHY_BLOCK_SAMPLE_SCAN)
OP_PROFILE_NAME_DEF(PHY_INSERT_RETURNING) /*55*/
OP_PROFILE_NAME_DEF(PHY_REPLACE_RETURNING)
OP_PROFILE_NAME_DEF(PHY_INSERT_ON_DUP_RETURNING)
OP_PROFILE_NAME_DEF(PHY_DELETE_RETURNING)
OP_PROFILE_NAME_DEF(PHY_UPDATE_RETURNING)
OP_PROFILE_NAME_DEF(PHY_MULTI_PART_INSERT) /*60*/
OP_PROFILE_NAME_DEF(PHY_MULTI_PART_UPDATE)
OP_PROFILE_NAME_DEF(PHY_MULTI_PART_DELETE)
OP_PROFILE_NAME_DEF(PHY_UK_ROW_TRANSFORM)
OP_PROFILE_NAME_DEF(PHY_DETERMINATE_TASK_TRANSMIT)
OP_PROFILE_NAME_DEF(PHY_MULTI_PART_TABLE_SCAN) /*65*/
OP_PROFILE_NAME_DEF(PHY_TABLE_LOOKUP)
OP_PROFILE_NAME_DEF(PHY_GRANULE_ITERATOR)
OP_PROFILE_NAME_DEF(PHY_PX_FIFO_RECEIVE)
OP_PROFILE_NAME_DEF(PHY_PX_MERGE_SORT_RECEIVE)
OP_PROFILE_NAME_DEF(PHY_PX_DIST_TRANSMIT) /*70*/
OP_PROFILE_NAME_DEF(PHY_PX_REPART_TRANSMIT)
OP_PROFILE_NAME_DEF(PHY_PX_REDUCE_TRANSMIT)
OP_PROFILE_NAME_DEF(PHY_PX_FIFO_COORD)
OP_PROFILE_NAME_DEF(PHY_PX_MERGE_SORT_COORD)
OP_PROFILE_NAME_DEF(PHY_TABLE_ROW_STORE) /*75*/
OP_PROFILE_NAME_DEF(PHY_JOIN_FILTER)
OP_PROFILE_NAME_DEF(PHY_TABLE_CONFLICT_ROW_FETCHER)
OP_PROFILE_NAME_DEF(PHY_MULTI_TABLE_REPLACE)
OP_PROFILE_NAME_DEF(PHY_MULTI_TABLE_INSERT_UP)
OP_PROFILE_NAME_DEF(PHY_SEQUENCE) /*80*/
OP_PROFILE_NAME_DEF(PHY_EXPR_VALUES_WITH_CHILD)
OP_PROFILE_NAME_DEF(PHY_FUNCTION_TABLE)
OP_PROFILE_NAME_DEF(PHY_MONITORING_DUMP)
OP_PROFILE_NAME_DEF(PHY_MULTI_TABLE_MERGE)
OP_PROFILE_NAME_DEF(PHY_LIGHT_GRANULE_ITERATOR) /*85*/
OP_PROFILE_NAME_DEF(PHY_PX_MULTI_PART_DELETE)
OP_PROFILE_NAME_DEF(PHY_PX_MULTI_PART_UPDATE)
OP_PROFILE_NAME_DEF(PHY_PX_MULTI_PART_INSERT)
OP_PROFILE_NAME_DEF(PHY_UNPIVOT)
OP_PROFILE_NAME_DEF(PHY_CONNECT_BY) /*90*/
OP_PROFILE_NAME_DEF(PHY_LINK_SCAN)
OP_PROFILE_NAME_DEF(PHY_LOCK)
OP_PROFILE_NAME_DEF(PHY_MULTI_LOCK)
OP_PROFILE_NAME_DEF(PHY_TEMP_TABLE_INSERT)
OP_PROFILE_NAME_DEF(PHY_TEMP_TABLE_ACCESS) /*95*/
OP_PROFILE_NAME_DEF(PHY_TEMP_TABLE_TRANSFORMATION)
OP_PROFILE_NAME_DEF(PHY_MULTI_TABLE_INSERT)
OP_PROFILE_NAME_DEF(PHY_PX_MULTI_PART_SSTABLE_INSERT)
OP_PROFILE_NAME_DEF(PHY_ERR_LOG)
OP_PROFILE_NAME_DEF(PHY_PX_ORDERED_COORD) /*100*/
OP_PROFILE_NAME_DEF(PHY_STAT_COLLECTOR)
OP_PROFILE_NAME_DEF(PHY_LINK_DML)
OP_PROFILE_NAME_DEF(PHY_JSON_TABLE)
OP_PROFILE_NAME_DEF(PHY_OPTIMIZER_STATS_GATHERING)
OP_PROFILE_NAME_DEF(PHY_VALUES_TABLE_ACCESS)
OP_PROFILE_NAME_DEF(PHY_NEW_OP_ADAPTER)
OP_PROFILE_NAME_DEF(PHY_FAKE_TABLE)  /* for testing only*/
OP_PROFILE_NAME_DEF(PHY_VEC_MATERIAL)
OP_PROFILE_NAME_DEF(PHY_VEC_HASH_GROUP_BY)
OP_PROFILE_NAME_DEF(PHY_VEC_HASH_DISTINCT) /*110*/
OP_PROFILE_NAME_DEF(PHY_VEC_LIMIT)
OP_PROFILE_NAME_DEF(PHY_VEC_SCALAR_AGGREGATE)
OP_PROFILE_NAME_DEF(PHY_VEC_HASH_JOIN)
OP_PROFILE_NAME_DEF(PHY_VEC_PX_MERGE_SORT_RECEIVE)
OP_PROFILE_NAME_DEF(PHY_VEC_PX_MERGE_SORT_COORD)
OP_PROFILE_NAME_DEF(PHY_VEC_TEMP_TABLE_INSERT)
OP_PROFILE_NAME_DEF(PHY_VEC_TEMP_TABLE_ACCESS)
OP_PROFILE_NAME_DEF(PHY_VEC_TEMP_TABLE_TRANSFORMATION)
OP_PROFILE_NAME_DEF(PHY_VEC_SORT)
OP_PROFILE_NAME_DEF(PHY_VEC_MERGE_DISTINCT) /*120*/
OP_PROFILE_NAME_DEF(PHY_VEC_HASH_UNION)
OP_PROFILE_NAME_DEF(PHY_VEC_HASH_INTERSECT)
OP_PROFILE_NAME_DEF(PHY_VEC_HASH_EXCEPT)
OP_PROFILE_NAME_DEF(PHY_VEC_WINDOW_FUNCTION)
OP_PROFILE_NAME_DEF(PHY_VEC_MERGE_GROUP_BY)
OP_PROFILE_NAME_DEF(PHY_VEC_MERGE_JOIN)
OP_PROFILE_NAME_DEF(PHY_VEC_MERGE_UNION)
OP_PROFILE_NAME_DEF(PHY_VEC_MERGE_INTERSECT)
OP_PROFILE_NAME_DEF(PHY_VEC_MERGE_EXCEPT)
OP_PROFILE_NAME_DEF(PHY_EXPAND) /*130*/
OP_PROFILE_NAME_DEF(PHY_VEC_NESTED_LOOP_JOIN)
OP_PROFILE_NAME_DEF(PHY_VEC_SUBPLAN_FILTER)
OP_PROFILE_NAME_DEF(PHY_TABLE_DIRECT_INSERT)
OP_PROFILE_NAME_DEF(PHY_UNPIVOT_V2)
OP_PROFILE_NAME_DEF(PHY_DDL_BLOCK_SAMPLE_SCAN)
OP_PROFILE_NAME_DEF(PHY_VEC_PX_MULTI_PART_SSTABLE_INSERT)
OP_PROFILE_NAME_DEF(PHY_END)
#endif

#ifdef OTHER_PROFILE_NAME_DEF
OTHER_PROFILE_NAME_DEF(OTHER_PROFILE_NAME_BEGIN, "other profile name begin") /* 1000 */
OTHER_PROFILE_NAME_DEF(LAKE_TABLE_FILE_READER, "Lake Table File Reader")
OTHER_PROFILE_NAME_DEF(LAKE_TABLE_PREFETCH, "Lake Table Prefetch")
OTHER_PROFILE_NAME_DEF(LAKE_TABLE_MEM_CACHE, "Lake Table Memory Cache")
OTHER_PROFILE_NAME_DEF(LAKE_TABLE_DISK_CACHE, "Lake Table Disk Cache")
OTHER_PROFILE_NAME_DEF(LAKE_TABLE_STORAGE_IO, "Lake Table Storage IO")
OTHER_PROFILE_NAME_DEF(LAKE_TABLE_EAGER, "Lake Table Eager")
OTHER_PROFILE_NAME_DEF(LAKE_TABLE_NON_EAGER, "Lake Table Non Eager")
OTHER_PROFILE_NAME_DEF(LAKE_TABLE_PARQUET_FILE_READER, "Lake Table Parquet File Reader")
OTHER_PROFILE_NAME_DEF(LAKE_TABLE_ORC_FILE_READER, "Lake Table ORC File Reader")
OTHER_PROFILE_NAME_DEF(SQL_COMPILE, "Sql Compile")
OTHER_PROFILE_NAME_DEF(SQL_PARSE, "Sql Parse")
OTHER_PROFILE_NAME_DEF(SQL_RESOLVE, "Sql Resolve")
OTHER_PROFILE_NAME_DEF(SQL_REWRITE, "Sql Rewrite")
OTHER_PROFILE_NAME_DEF(SQL_OPTIMIZE, "Sql Optimize")
OTHER_PROFILE_NAME_DEF(OTHER_PROFILE_NAME_END, "other profile name end")
#endif

#ifndef _OB_PROFILE_NAME_H
#define _OB_PROFILE_NAME_H 1

namespace oceanbase
{
namespace common
{

enum class ObProfileId
{
// compact with src/sql/engine/ob_phy_operator_type.h
#define OP_PROFILE_NAME_DEF(enum_type) enum_type,
#include "share/diagnosis/ob_profile_name_def.h"
#undef OP_PROFILE_NAME_DEF

OTHER_PROFILE_NAME_BORDER = 999,
#define OTHER_PROFILE_NAME_DEF(enum_type, desc) enum_type,
#include "share/diagnosis/ob_profile_name_def.h"
#undef OTHER_PROFILE_NAME_DEF
};

struct ObProfileNameSet
{
  struct ObProfileName
  {
    const char *name_{nullptr};
  };
  ObProfileNameSet();
  void set_profile_type_name(ObProfileId type, const char *name);
  static const char *get_profile_name(ObProfileId type, bool enable_rich_format = false);

private:
  ObProfileName set_[static_cast<int>(ObProfileId::OTHER_PROFILE_NAME_END)
                     - static_cast<int>(ObProfileId::OTHER_PROFILE_NAME_BEGIN)];
};


} // namespace common
} // namespace oceanbase

#endif /* _OB_PROFILE_NAME_H */
